package com.zenithmind.chat.controller.base;

import com.zenithmind.common.result.PageResult;
import com.zenithmind.common.result.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * 基础查询控制器接口 - 遵循接口隔离原则
 * 只包含查询相关的基础方法
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface BaseQueryController<T, Q> {

    /**
     * 分页查询
     * 
     * @param query 查询条件
     * @return 分页结果
     */
    @GetMapping("/page")
    @Operation(summary = "分页查询", description = "支持多条件分页查询")
    Result<PageResult<T>> getPage(Q query);

    /**
     * 根据ID查询
     * 
     * @param id 主键ID
     * @return 实体对象
     */
    @GetMapping("/{id}")
    @Operation(summary = "根据ID查询", description = "根据主键ID获取详细信息")
    Result<T> getById(@Parameter(description = "主键ID") @PathVariable String id);

    /**
     * 列表查询
     * 
     * @param status 状态（可选）
     * @return 实体列表
     */
    @GetMapping("/list")
    @Operation(summary = "列表查询", description = "获取实体列表")
    Result<List<T>> getList(@Parameter(description = "状态") @RequestParam(required = false) Integer status);

    /**
     * 统计数量
     * 
     * @param status 状态（可选）
     * @return 数量
     */
    @GetMapping("/count")
    @Operation(summary = "统计数量", description = "统计实体数量")
    Result<Long> count(@Parameter(description = "状态") @RequestParam(required = false) Integer status);
}
